

void main(){
  //todo 1.Var关键字
  var a = 1; //Dart 中 var 变量一旦赋值，类型便会确定，则不能再改变其类型
  // a = "1"; 会报错
  var recoed = ('firlst',a:2);

  //todo 2.dynamic和Object,dynamic与Object声明的变量都可以赋值任意对象，且后期可以改变赋值的类型
  dynamic c;
  Object d; //Object声明的对象只能使用 Object 的属性与方法, 否则编译器会报错
  c =  2;
  c = "Hi";

  d = 3;
  d = "Hello";
  
  print(c.length); //打印2
  // print(d.length); 会报错

  print('c:$c,d:$d');

  //todo 3.final和const 两者区别在于：const 变量是一个编译时常量（编译时直接替换为常量值），final变量在第一次使用时被初始化。被final或者const修饰的变量，变量类型可以省略，
  final str1 = "hhh"; // 一个 final 变量只能被设置一次
  // str1 = "12131";  会报错
  const str2 = "hhh";

  // todo 4. 空安全（null-safety）
  int i = 9;
  int? j; //定义为可空类型，对于可空变量，我们在使用前必须判空。

  late int num;// 如果我们预期变量不能为空，但在定义时不能确定其初始值，则可以加上late关键字，
  num = 9;
  j = 888;
  print(j!>9); // !表示非空，如果为空，会报错

  Function? fun;

  fun?.call();//如果函数变量可空时，调用的时候可以用语法糖,fun 不为空时则会被调用
}